import { Service } from 'egg';

const md5 = require('md5');
const svgCaptcha = require('svg-captcha');
// 加盐加密
function confusePassWd(passWord: string) {
  return md5(`z${ passWord }sb`);
}
export default class LoginService extends Service {
  async login(userName: string, password: string) {
    const { ctx } = this;
    const findRes = await ctx.model.System.SysMember.findOne({
      where: {
        user_name: userName,
      },
    });
    // 判断用户是否存在以及密码是否正确
    if (findRes && findRes.password === confusePassWd(password)) {
      const token = await this.createToken(findRes);
      return {
        token,
        findRes,
      };
    }
    return false;
  }
  async createToken(userInfo): Promise<string> {
    const { ctx, app } = this;
    const token: string = app.jwt.sign({
      id: userInfo.id,
      name: userInfo.user_name,	// 需要存储的Token数据
    }, app.config.jwt.secret);
    ctx.setRedis(userInfo.user_name, token, 60 * 60);
    // 将生成的Token返回给前端
    return token;
  }
  // {
  //   size: 4, // 长度(显示几个字符)
  //   fontSize: 50, // 字体大小
  //   width: 100, // 宽度
  //   height: 58, // 高度
  //   background: '#c9cdcd', // 背景颜色
  // }
  async captcha() {
    const { ctx } = this;
    const captchaOption = this.app.config.captchaOption;
    const captcha = svgCaptcha.create(captchaOption);
    await ctx.setRedis(ctx.request.ip, captcha.text, captchaOption.outTime);
    return captcha;
  }
}
